﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Drawing;
using System.Linq;
using System.Runtime.Remoting.Contexts;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using Works.model.EF;
using Works.Services;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;

namespace Works
{



    public partial class FormMain : Form
    {
        private FinalWorkEntities db = new FinalWorkEntities();
        public FormMain()
        {
            InitializeComponent();


        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            // TODO: 这行代码将数据加载到表“finalWorkDataSet4.T002user”中。您可以根据需要移动或移除它。
            this.t002userTableAdapter2.Fill(this.finalWorkDataSet4.T002user);
            // TODO: 这行代码将数据加载到表“finalWorkDataSet3.T002user”中。您可以根据需要移动或移除它。
            this.t002userTableAdapter1.Fill(this.finalWorkDataSet3.T002user);
            // TODO: 这行代码将数据加载到表“finalWorkDataSet1.T001menu”中。您可以根据需要移动或移除它。
            this.t001menuTableAdapter.Fill(this.finalWorkDataSet1.T001menu);
            // TODO: 这行代码将数据加载到表“finalWorkDataSet.T002user”中。您可以根据需要移动或移除它。

            // 窗体加载时执行
            LoadDataIntoDataGridView();
            FormLogin frm = new FormLogin();
            var result = frm.ShowDialog();
            if (result != DialogResult.OK)
            {
                //非正常登录 
                this.Close();
            }

            txtTotalPrice.Visible = false;

        }
        private void LoadDataIntoDataGridView()
        {
            // 使用Entity Framework查询数据库
            var menuData = db.T001menu.ToList();

            // 将数据绑定到DataGridView
            dataGridView1.DataSource = menuData;

            // 使用Entity Framework查询数据库
            var userData = db.T002user.ToList();

            // 将数据绑定到DataGridView
            dataGridView2.DataSource = userData;
        }

        private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            FormAdmin formAdmin = new FormAdmin();
            formAdmin.ShowDialog();
            LoadDataIntoDataGridView();
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                // 获取选中行的数据
                var row = dataGridView1.Rows[e.RowIndex];
                txtname.Text = row.Cells["菜名DataGridViewTextBoxColumn1"].Value.ToString(); // 假设列名是 "菜名"
                txtprice.Text = row.Cells["价格DataGridViewTextBoxColumn1"].Value.ToString(); // 假设列名是 "价格"
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (int.TryParse(txtprice.Text, out int price) &&
       int.TryParse(txtnumber.Text, out int number) &&
       !int.TryParse(txtTotalPrice.Text, out int total))
            {
                // 计算总价格
                total = price * number;

                using (var db = new FinalWorkEntities())
                {
                    // 创建新的菜单项
                    var newUser = new T002user
                    {
                        时间 = DateTime.Now,
                        菜名 = txtname.Text,
                        份数 = number,
                        价格 = total
                    };

                    // 将新菜单项添加到数据库
                    db.T002user.Add(newUser);
                    db.SaveChanges();

                    // 刷新数据显示
                    LoadDataIntoDataGridView();
                }
            }
            else
            {
                MessageBox.Show("请输入有效的价格和数量");
            }
        }

        /// <summary>
        /// 选中行的方法
        /// </summary>
        /// <param name="dgv"></param>
        /// <returns></returns>
        private T002user GetSelectedRowData(DataGridView dgv)
        {
            // 检查是否有选中的行
            if (dgv.SelectedRows.Count > 0)
            {
                // 获取选中行的索引
                int selectedRowIndex = dgv.SelectedRows[0].Index;

                // 创建一个新的对象来存储数据
                T002user userData = new T002user();

                // 遍历所有列，将数据从 DataGridView 行复制到 userData 对象
                foreach (DataGridViewColumn column in dgv.Columns)
                {
                    if (column.Visible) // 只处理可见的列
                    {
                        var value = dgv.Rows[selectedRowIndex].Cells[column.Name].Value;
                        switch (column.Name) // 根据列名处理数据
                        {
                            case "时间": userData.时间 = Convert.ToDateTime(value); break;
                            case "菜名": userData.菜名 = value.ToString(); break;
                            case "份数": userData.份数 = Convert.ToInt32(value); break;
                            case "价格": userData.价格 = Convert.ToInt32(value); break;
                                // 如果有 Id 列，并且您希望从 DataGridView 获取它，取消下面这行的注释
                                //case "Id": userData.Id = Convert.ToInt32(value); break;
                        }
                    }
                }
                return userData;
            }
            else
            {
                MessageBox.Show("请选择要删除的记录。");
                return null; // 返回 null 表示没有选中的行
            }
        }
        private void txtTotalPrice_TextChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            // 检查是否有选中的行
            if (dataGridView2.SelectedRows.Count > 0)
            {
                // 获取选中行的索引
                int selectedRowIndex = dataGridView2.SelectedRows[0].Index;

                // 使用 Entity Framework 查找对应记录
                var entityToDelete = db.T002user.Find(dataGridView2.Rows[selectedRowIndex].Cells["时间DataGridViewTextBoxColumn"].Value);
                if (entityToDelete != null)
                {
                    // 执行删除操作
                    db.T002user.Remove(entityToDelete);
                    db.SaveChanges();

                    // 刷新数据显示
                    LoadDataIntoDataGridView();
                }
                else
                {
                    MessageBox.Show("未找到要删除的记录。");
                }
            }
            else
            {
                MessageBox.Show("请选择要删除的记录。");
            }
        }


        private void dataGridView2_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void dataGridView2_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void button5_Click(object sender, EventArgs e)
        {

        }

        private void btnChange_Click(object sender, EventArgs e)
        {
            txtChange.Visible = true;
            btnChangeOk.Visible = true;
        }

        private void txtChange_TextChanged(object sender, EventArgs e)
        {

        }

        private void btnChangeOk_Click(object sender, EventArgs e)
        {
            // 检查 txtChange 中的值是否有效
            if (int.TryParse(txtChange.Text, out int newQuantity) && newQuantity > 0)
            {
                // 获取当前选中行的索引
                if (dataGridView2.SelectedRows.Count > 0)
                {
                    int selectedRowIndex = dataGridView2.SelectedRows[0].Index;

                    // 获取当前选中行的原始价格
                    int originalPrice = Convert.ToInt32(dataGridView1.Rows[selectedRowIndex].Cells["价格DataGridViewTextBoxColumn1"].Value);

                    // 计算新总价
                    int totalPrice = newQuantity * originalPrice;

                    // 更新数据库中的记录
                    using (var db = new FinalWorkEntities())
                    {
                        // 假设主键现在是 DateTime 类型
                       
                        var userData = db.T002user.Find(dataGridView2.Rows[selectedRowIndex].Cells["时间DataGridViewTextBoxColumn"].Value);
                        if (userData != null)
                        {
                            userData.份数 = newQuantity;
                            userData.价格 = totalPrice;
                            db.Entry(userData).State = EntityState.Modified;
                            db.SaveChanges();
                        }
                    }

                    // 刷新数据显示
                    LoadDataIntoDataGridView01();
                }
                else
                {
                    MessageBox.Show("请选择一个有效的行。");
                }
            }
        }


        private void LoadDataIntoDataGridView01()
        {
            using (var db = new FinalWorkEntities())
            {
                var userData = db.T002user.ToList();
                dataGridView2.DataSource = new BindingSource(userData, null);
            }
        }
    

        private void button4_Click(object sender, EventArgs e)
        {
           ;

            // 删除数据库中的所有记录
            try
            {
                

                // 计算总价格并显示包含总价格的窗体
                int? totalPrice = db.T002user.Sum(u => u.价格 );
                if (totalPrice.HasValue) // 检查是否有总价格
                {
                    FormSummary summaryForm = new FormSummary();
                    summaryForm.ShowSummary(totalPrice.Value); // 显示窗体，传递总价格
                }


                else
                {
                    MessageBox.Show("当前没有订单数据。");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("结账时发生错误：" + ex.Message);
            }

            // 使用 Local 关键字获取上下文的本地副本
            var usersToDelete = db.T002user.Local.ToList();
            foreach (var user in usersToDelete)
            {
                db.T002user.Remove(user);
            }
            db.SaveChanges(); // 提交更改到数据库

            // 重新加载数据显示到 DataGridView
            LoadDataIntoDataGridView();
            // 清空 dataGridView2 中的数据
            dataGridView2.DataSource = null;
        }
    }
}



